import pandas as pd

def parse_mixed_dates(date_series):
    """
    解析多种格式日期：
    - Excel 数字日期（序列号）
    - YYYYMMDD 数字或浮点数日期（如 20250520 或 20250520.0）
    - 常见字符串日期
    """
    cleaned = date_series.astype(str).str.strip()
    parsed_dates = pd.Series(pd.NaT, index=cleaned.index)

    # 检测是否为纯数字或小数
    numeric_mask = cleaned.str.replace('.', '', 1).str.isnumeric()
    if numeric_mask.any():
        numeric_vals = cleaned[numeric_mask].astype(float)

        # 判断 Excel 序列号
        excel_mask = numeric_vals.between(30000, 60000)
        if excel_mask.any():
            parsed_dates.loc[numeric_mask[numeric_mask].index[excel_mask]] = (
                pd.to_datetime('1899-12-30') + pd.to_timedelta(numeric_vals[excel_mask], unit='D')
            )

        # 其余当 YYYYMMDD 处理（含 20250520.0）
        yyyymmdd_mask = ~excel_mask
        if yyyymmdd_mask.any():
            yyyymmdd_vals = numeric_vals[yyyymmdd_mask].astype(int).astype(str)
            parsed_dates.loc[numeric_mask[numeric_mask].index[yyyymmdd_mask]] = pd.to_datetime(
                yyyymmdd_vals, format="%Y%m%d", errors="coerce"
            )

    # 处理非数字字符串
    remaining = cleaned[~numeric_mask]
    date_formats = [
        "%Y-%m-%d %H:%M:%S",
        "%Y-%m-%d",
        "%Y/%m/%d %H:%M:%S",
        "%Y/%m/%d",
        "%Y-%m-%d %p %I:%M:%S",
        "%Y/%m/%d %p %I:%M:%S",
    ]

    for fmt in date_formats:
        if not remaining.empty:
            temp = pd.to_datetime(remaining, format=fmt, errors='coerce')
            parsed_dates.update(temp)
            remaining = remaining[temp.isna()]

    return parsed_dates